﻿Imports System.IO
Imports BLL
Imports EntitiesLayer
Public Class FrmMantMaquinas
    Public gestorMaquinasEjercicio As New GestorMaquinasEjercicio()
    'Private openFileDialog1 As System.Windows.Forms.OpenFileDialog = New OpenFileDialog()
    'Private pictureBox1 As System.Windows.Forms.PictureBox
    Private m_lImageFileLength As Long = 0
    Private m_barrImg As Byte()
    Private validador As ValidadorDeFormularios
    Private listaMaquinas As IEnumerable(Of Maquina)
    Private Sub bntSalir_Click(sender As Object, e As EventArgs) Handles bntSalir.Click
        Me.Close()
    End Sub

    Private Sub FrmMantMaquinas_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        If Not gestorProcesos.esPermitido(Permiso.Listar_máquinas) Then
            MessageBox.Show("Ud no tiene acceso!!")
            Me.Close()
        End If

        Me.loadMaquinas()
        validador = New ValidadorDeFormularios(Me, ErrorProvider1)

        With cmbSearch
            .DataSource = New BindingSource(Criterios(), Nothing)
            .DisplayMember = "Key"
            .ValueMember = "Value"
        End With
    End Sub

    Private Sub loadMaquinas()
        txtValorBuscar.Text = ""
        listaMaquinas = gestorMaquinasEjercicio.listarMaquinas()
        With dgvListarMaquinas
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToDeleteRows = False
            .Columns.Clear()

            .Columns.Add("IdMaquina", "Id")
            .Columns.Add("NombreMaquina", "Nombre")
            .Columns.Add("NumeroSerie", "Serie")
            .Columns.Add("NumeroMaquina", "Número")
            .Columns.Add("IndicacionesUso", "Indicaciones de Uso")
            .Columns.Add("IdTipoMaquina", "Tipo de Máquina")
            .Columns.Add("Estado", "Estado")
            '.Columns.Add("FotoMaquina", "Imagen")
            'Dim imageColumn = New DataGridViewImageColumn()
            'imageColumn.Name = "FotoMaquina"
            'imageColumn.ImageLayout = DataGridViewImageCellLayout.Zoom
            'imageColumn.DefaultCellStyle.NullValue = Nothing
            '.Columns.Add(imageColumn)
            Dim imageColumn = New DataGridViewImageColumn()
            With imageColumn
                .Name = "FotoMaquina"
                .ImageLayout = DataGridViewImageCellLayout.Zoom
                .DefaultCellStyle.NullValue = Nothing
            End With
            .Columns.Add(imageColumn)



            .Columns(0).DataPropertyName = "IdMaquina"
            .Columns(0).Visible = False
            .Columns(0).Width = 100
            .Columns(1).DataPropertyName = "NombreMaquina"
            .Columns(1).Visible = True
            .Columns(1).Width = 200
            .Columns(2).DataPropertyName = "NumeroSerie"
            .Columns(2).Visible = True
            .Columns(2).Width = 200
            .Columns(3).DataPropertyName = "NumeroMaquina"
            .Columns(3).Visible = True
            .Columns(3).Width = 100
            .Columns(4).DataPropertyName = "IndicacionesUso"
            .Columns(4).Visible = True
            .Columns(4).Width = 200
            .Columns(5).DataPropertyName = "IdTipoMaquina"
            .Columns(5).Visible = True
            .Columns(5).Width = 100
            .Columns(6).DataPropertyName = "Estado"
            .Columns(6).Visible = True
            .Columns(6).Width = 100
            .Columns(7).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            .Columns(7).DataPropertyName = "FotoMaquina"
            .Columns(7).Visible = True
            .Columns(7).Width = 500


            .DataSource = New BindingSource(listaMaquinas, Nothing)
        End With
    End Sub


    Private Sub TabControl_Selected(sender As Object, e As TabControlEventArgs) Handles TabControl.Selected
        Select Case e.TabPageIndex
            Case 0
                If Not gestorProcesos.esPermitido(Permiso.Listar_máquinas) Then
                    MessageBox.Show("Ud no tiene acceso!!")
                    Me.Close()
                End If
                Me.loadMaquinas()
                'MessageBox.Show("listar")
            Case 1
                If Not gestorProcesos.esPermitido(Permiso.Incluir_máquinas) Then
                    MessageBox.Show("Ud no tiene acceso!!")
                    Me.Close()
                End If
                'MessageBox.Show("registrar")
                cmbReqTipo.DisplayMember = "DescripcionTipo"
                cmbReqTipo.ValueMember = "idTipoMaquina"
                cmbReqTipo.DataSource = gestorMaquinasEjercicio.GetTipoMaquinas().Tables(0)
            Case 2
                If Not gestorProcesos.esPermitido(Permiso.Modificar_máquinas) Then
                    MessageBox.Show("Ud no tiene acceso!!")
                    Me.Close()
                End If
                'MessageBox.Show("modificar")
                cmbReqModTipo.DisplayMember = "DescripcionTipo"
                cmbReqModTipo.ValueMember = "idTipoMaquina"
                cmbReqModTipo.DataSource = gestorMaquinasEjercicio.GetTipoMaquinas().Tables(0)

                cmbReqSeleccionar.DisplayMember = "NombreMaquina"
                cmbReqSeleccionar.ValueMember = "idMaquina"
                cmbReqSeleccionar.DataSource = gestorMaquinasEjercicio.GetListaMaquinas().Tables(0)
            Case Else
        End Select

    End Sub

    Private Sub btnIncluir_Click(sender As Object, e As EventArgs) Handles btnIncluir.Click
        validador.Control = TabPageRegistrarMaquina

        If validador.ValidarFormulario() Then
            Dim nombreMaquina As String = Me.txtStrNombre.Text
            Dim numeroSerie As String = Me.txtStrSerie.Text
            Dim numeroMaquina As Integer = Convert.ToInt32(Me.txtIntNumero.Text)
            Dim imagen As Image = Me.picInsignia.Image
            Dim indicacionesUso As String = Me.txtStrIndicaciones.Text()
            Dim estado As Char = Convert.ToChar("A")
            Dim idTipoMaquina As String = gestorMaquinasEjercicio.GetIdTipoMaquinaByDesc(Me.cmbReqTipo.Text)

            If gestorMaquinasEjercicio.insertarMaquina(nombreMaquina, numeroSerie, numeroMaquina, indicacionesUso, idTipoMaquina, estado, imagen) Then
                MsgBox("La maquina fue agregada correctamente.")
                Me.txtStrNombre.Text = ""
                Me.txtStrSerie.Text = ""
                Me.txtIntNumero.Text = ""
                Me.txtStrIndicaciones.Text = ""
                Me.cmbReqTipo.Text = ""
                Me.picInsignia.Image = Nothing
                Me.m_lImageFileLength = 0
                m_barrImg = {}
            Else
                MsgBox("La maquina no fue registrada!!")
            End If
        End If
    End Sub

    Private Sub btnLoadImage_Click(sender As Object, e As EventArgs) Handles btnLoadImage.Click
        Me.OpenFileDialog1.Filter = "All Files|*.*|BMP Files|*.bmp|JPG Files|*.jpg"
        Me.OpenFileDialog1.ShowDialog(Me)

        Dim strFn As String = Me.OpenFileDialog1.FileName
        If strFn <> "" Then
            Me.picInsignia.Image = Image.FromFile(strFn)
        End If
    End Sub

    Private Sub btnBorrarImagen_Click(sender As Object, e As EventArgs) Handles btnBorrarImagen.Click
        Me.picInsignia.Image = Nothing
        Me.m_lImageFileLength = 0
        m_barrImg = {}
    End Sub

    Private Sub cmbReqSeleccionar_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbReqSeleccionar.SelectedIndexChanged

        Dim selectedItem As Integer = DirectCast(cmbReqSeleccionar.SelectedItem, DataRowView).Item("idMaquina")
        Dim maquina As Maquina = gestorMaquinasEjercicio.getInfoMaquinaById(selectedItem)
        Me.txtStrModNombre.Text = maquina.NombreMaquina
        Me.txtIntModNumero.Text = maquina.NumeroMaquina
        Me.txtStrModSerie.Text = maquina.NumeroSerie
        Me.txtStrModIndicaciones.Text = maquina.IndicacionesUso
        Me.picInsigniaMod.Image = maquina.Imagen
        If maquina.Estado = "A" Then
            radioBtnActivo.Checked = True
        Else
            radioBtnInactivo.Checked = True
        End If

    End Sub

    Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click
        validador.Control = TabPageModificarMaquina

        If validador.ValidarFormulario() Then
            Dim idMaquina As Integer = DirectCast(cmbReqSeleccionar.SelectedItem, DataRowView).Item("idMaquina")
            Dim nombreMaquina As String = Me.txtStrModNombre.Text
            Dim numeroSerie As String = Me.txtStrModSerie.Text
            Dim numeroMaquina As Integer = Convert.ToInt32(Me.txtIntModNumero.Text)
            Dim imagen As Image = Me.picInsigniaMod.Image
            Dim indicacionesUso As String = Me.txtStrModIndicaciones.Text()
            Dim estado As Char
            If radioBtnActivo.Checked = True Then
                estado = "A"
            Else
                estado = "I"
            End If
            Dim idTipoMaquina As String = gestorMaquinasEjercicio.GetIdTipoMaquinaByDesc(Me.cmbReqModTipo.Text)

            If gestorMaquinasEjercicio.modificarMaquina(idMaquina, nombreMaquina, numeroSerie, numeroMaquina, indicacionesUso, idTipoMaquina, estado, imagen) Then
                'MsgBox("La maquina fue modificada correctamente.")
                'Me.txtStrModNombre.Text = ""
                'Me.txtStrModSerie.Text = ""
                'Me.txtIntModNumero.Text = ""
                'Me.txtStrModIndicaciones.Text = ""
                'Me.cmbReqModTipo.Text = ""
                'Me.picInsigniaMod.Image = Nothing
                'Me.m_lImageFileLength = 0
                'm_barrImg = {}
                MsgBox("La maquina fue modificada correctamente.")
                cmbReqModTipo.DisplayMember = "DescripcionTipo"
                cmbReqModTipo.ValueMember = "idTipoMaquina"
                cmbReqModTipo.DataSource = gestorMaquinasEjercicio.GetTipoMaquinas().Tables(0)

                cmbReqSeleccionar.DisplayMember = "NombreMaquina"
                cmbReqSeleccionar.ValueMember = "idMaquina"
                cmbReqSeleccionar.DataSource = gestorMaquinasEjercicio.GetListaMaquinas().Tables(0)
            Else
                MsgBox("La maquina no fue modicada!!")
            End If
        End If

    End Sub

    Private Sub btnLoadImageMod_Click(sender As Object, e As EventArgs) Handles btnLoadImageMod.Click
        Me.OpenFileDialog1.Filter = "All Files|*.*|BMP Files|*.bmp|JPG Files|*.jpg"
        Me.OpenFileDialog1.ShowDialog(Me)

        Dim strFn As String = Me.OpenFileDialog1.FileName
        If strFn <> "" Then
            Me.picInsigniaMod.Image = Image.FromFile(strFn)
        End If
    End Sub

    Private Sub btnBorrarImagenMod_Click(sender As Object, e As EventArgs) Handles btnBorrarImagenMod.Click
        Me.picInsigniaMod.Image = Nothing
        Me.m_lImageFileLength = 0
        m_barrImg = {}
    End Sub

    Private Sub MostrarCriterios(plistaE As IEnumerable(Of EntitiesLayer.Maquina))
        dgvListarMaquinas.DataSource = New BindingSource(plistaE, Nothing)
    End Sub

    Public Function Criterios() As Dictionary(Of String, Func(Of Maquina, String))
        Dim criteria = New Dictionary(Of String, Func(Of Maquina, String))()
        With criteria
            .Add("Nombre Maquina", Function(p) p.NombreMaquina)
            .Add("Numero Serie", Function(p) p.NumeroSerie)
        End With

        Return criteria
    End Function


    Private Sub txtValorBuscar_TextChanged(sender As Object, e As EventArgs) Handles txtValorBuscar.TextChanged
        Dim key = DirectCast(cmbSearch.SelectedItem, KeyValuePair(Of String, Func(Of Maquina, String)))
        dgvListarMaquinas.Rows.Clear()
        If txtValorBuscar.Text.Equals("") Then
            MostrarCriterios(listaMaquinas)
        Else
            MostrarCriterios(listaMaquinas.Like(key.Value, txtValorBuscar.Text.Trim()))
        End If
    End Sub
End Class